isf 0.1.0

Parsing, Deserialization and Serialization of the Interactive Shader Format.
Documentation
/*{
    "CATEGORIES": [
        "Stylize"
    ],
    "CREDIT": "by VIDVOX",
    "DESCRIPTION": "adapted from https://github.com/neilmendoza/ofxPostProcessing/blob/master/src/GodRaysPass.cpp",
    "INPUTS": [
        {
            "NAME": "inputImage",
            "TYPE": "image"
        },
        {
            "DEFAULT": 0.5,
            "MAX": 1,
            "MIN": 0,
            "NAME": "lightDirDOTviewDir",
            "TYPE": "float"
        },
        {
            "DEFAULT": [
                0.5,
                0.5
            ],
            "MAX": [
                1,
                1
            ],
            "MIN": [
                0,
                0
            ],
            "NAME": "lightPositionOnScreen",
            "TYPE": "point2D"
        },
        {
            "DEFAULT": 10,
            "LABELS": [
                "Low",
                "Mid",
                "High"
            ],
            "NAME": "quality",
            "TYPE": "long",
            "VALUES": [
                5,
                10,
                25
            ]
        }
    ],
    "ISFVSN": "2"
}
*/


void main(void)
{
	vec4 origColor = IMG_THIS_PIXEL(inputImage);
	vec4 raysColor = IMG_THIS_PIXEL(inputImage);
	int NUM_SAMPLES = quality;

	if (lightDirDOTviewDir>0.0){
		float exposure	= 0.1/float(NUM_SAMPLES);
		float decay		= 1.0 ;
		float density	= 0.5;
		float weight	= 6.0;
		float illuminationDecay = 1.0;
		vec2		normSrcCoord;

		normSrcCoord.x = isf_FragNormCoord[0];
		normSrcCoord.y = isf_FragNormCoord[1];

		vec2 deltaTextCoord = vec2(normSrcCoord.st - lightPositionOnScreen);
		vec2 textCoo = normSrcCoord;
		deltaTextCoord *= 1.0 / float(NUM_SAMPLES) * density;

		for(int i=0; i < NUM_SAMPLES ; i++)	{
			textCoo -= deltaTextCoord;
			vec4 tsample = IMG_NORM_PIXEL(inputImage, textCoo);
			tsample *= illuminationDecay * weight;
			raysColor += tsample;
			illuminationDecay *= decay;
		}
		raysColor *= exposure * lightDirDOTviewDir;
		float p = 0.3 *raysColor.g + 0.59*raysColor.r + 0.11*raysColor.b;
		gl_FragColor = origColor + p;
	}
	else {
		gl_FragColor = origColor;
	}
}